import java.util.*;

/**
 * 幸运的袋子
 * 描述:
 *
 * 一个袋子里面有n个球，每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。
 * 例如：如果袋子里面的球的号码是{1, 1, 2, 3}，这个袋子就是幸运的，因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3
 * 你可以适当从袋子里移除一些球(可以移除0个,但是别移除完)，要使移除后的袋子是幸运的。现在让你编程计算一下你可以获得的多少种不同的幸运的袋子。
 *
 * 输入描述：
 * 第一行输入一个正整数n(n ≤ 1000) 第二行为n个数正整数xi(xi ≤ 1000)
 *
 * 输出描述：
 * 输出可以产生的幸运的袋子数
 */
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int []arr = new int[n];
        for( int i=0; i<n; i++) {
            arr[i] = in.nextInt();
        }
        //先进行排序
        Arrays.sort(arr);
        System.out.println(count(arr,n,0,0,1));

    }

    public static int count( int []arr, int n, int pos,int sum,int multi) {
        int count = 0;
        for(int i=pos; i<n;i++) {
            sum += arr[i];
            multi*= arr[i];
            if( sum > multi) {
                count = count  +1 + count( arr,n,i+1,sum,multi); //
            } else if( arr[i] == 1) {
                count = count + count( arr,n,i+1,sum,multi); //特殊情况1 , +1后的sum 永远比 *1后的 multi大
            } else {
                break;
            }
            //递归不满足 sum > mult ,后续不需要再进行判断了,进行回溯
            sum -= arr[i];
            multi /= arr[i];
            //判断相同的 组合, 如果是1 1 3 和 1 1 3 这两种组合是没有区别的,只要当前数 和 后一个数相同就跳过
            while( i<n-1 && arr[i] == arr[i+1]) {
                i++;
            }
        }
        return count;

    }
}